/*******************************************************************
 *   > File Name: coordinate.c
 *   > Author: fly
 *   > Mail: XXXXXXXX@icode.com
 *   > Create Time: 2020年06月07日 星期日 09时10分34秒
 ******************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include "coordinate.h"

//创建一个coordinate对象
P_COORDINATE_T coordinate_create(short int x, short int y)
{
    if((x < 0)||(y < 0))
    {
        printf("coordinate create error ! x or y can not be less than zero.\n");
        return NULL;
    }

    P_COORDINATE_T p_coordinate = NULL;
    p_coordinate =(P_COORDINATE_T)malloc(sizeof(COORDINATE_T));

    if(NULL != p_coordinate)
    {
        p_coordinate->x = x;
        p_coordinate->y = y;
    }else{
        printf("coordinate malloc error! \n");
    }

    return p_coordinate;
}

//销毁一个coordinate对象
void coordinate_destroy(P_COORDINATE_T p_coordinate)
{
    if(NULL != p_coordinate)
    {
        free(p_coordinate);
        p_coordinate = NULL;
    }
}

//修改coordinate的属性值
void coordinate_moveby(P_COORDINATE_T p_coordinate, short int dx, short int dy)
{
    if(NULL != p_coordinate)
    {
        p_coordinate->x += dx;
        p_coordinate->y += dy;
    }
}

//获取coordinate的属性值x
short int coordinate_get_x(P_COORDINATE_T p_coordinate)
{
    return (NULL!=p_coordinate)?p_coordinate->x:-1;
}

//获取coordinate的属性值y
short int coordinate_get_y(P_COORDINATE_T p_coordinate)
{
    return (NULL!=p_coordinate)?p_coordinate->y:-1;
}

//测试类coordinate提供的接口
void coordinate_test_function(void)
{
    P_COORDINATE_T p_coordinate_1 = NULL;
    P_COORDINATE_T p_coordinate_2 = NULL;

    p_coordinate_1 = (P_COORDINATE_T)coordinate_create(100, 200);
    p_coordinate_2 = (P_COORDINATE_T)coordinate_create(10, 20);

    if((NULL == p_coordinate_1) || (NULL == p_coordinate_2))
    {
        printf("p_coordinate_1 or p_coordinate_2 create error!\n");
        return;
    }

    printf("p_coordinate_1 x = %d, y = %d\n",coordinate_get_x(p_coordinate_1), coordinate_get_y(p_coordinate_1));
    printf("p_coordinate_2 x = %d, y = %d\n",coordinate_get_x(p_coordinate_2), coordinate_get_y(p_coordinate_2));

    coordinate_moveby(p_coordinate_1, 50, 50);
    coordinate_moveby(p_coordinate_2, 50, 50);

    printf("p_coordinate_1 x = %d, y = %d\n",coordinate_get_x(p_coordinate_1), coordinate_get_y(p_coordinate_1));
    printf("p_coordinate_2 x = %d, y = %d\n",coordinate_get_x(p_coordinate_2), coordinate_get_y(p_coordinate_2));

    coordinate_destroy(p_coordinate_1);
    coordinate_destroy(p_coordinate_2);
}

int main(int argc, char* argv[])
{
    coordinate_test_function();
    return 0;
}
